In OPC Data Client.NET, the main methods constituting the functionality of EasyDAClient, EasyAEClient, and EasyUAClient components are actually implementations of IEasyDAClient, IEasyAEClient, and IEasyUAClient interfaces, respectively. The remaining methods and method overloads, which simply build upon the core interface methods, are implemented as extension methods on the interface. Also, at many places, arguments and properties are used that accept one of the IEasyXXClient interfaces, instead of a concrete component.
In most languages (certainly in C# and Visual Basic), this design leads to the same syntax as if all the methods were implemented directly on the core concrete object. The approach that we have chosen allows to supply a different implementation of the component’s interface where needed, and is currently used for simulation purposes in the browsing controls and dialogs.